#include <iostream>  
using namespace std;  
  
typedef int ElemType;  //数据类型重新命名，以下的ElemType类型，实际上是int类型


typedef struct node  //创造一个结构类型——结点，包含数字域和指针域
{   ElemType    data;  
    struct node * next;  
} NODE;  

typedef NODE * LinkList;  //创造一个链表，指针LinkList指向其头结点
  
//以下是所有用到的函数，具体功能，待之后补全
void output( LinkList );  
void change( int, int, NODE * );  
LinkList createList( ElemType );  
void inverse( LinkList );   

  
//创造一个链表，并返回————返回链表的头结点，就相当于返回整个链表
LinkList createList( ElemType finish )  //finish为一个整数，如-1。
{  
    ElemType x;  
    
    NODE *newNode;   //定义一个新结点，其现在只有一个名字，还没有给它分配内存空间
    
    LinkList first = new NODE;   // 为头结点开辟内存空间
    
    first->next = NULL;  //除头结点之外，还没有下一个结点
    first->data = finish;  //finish为int类型，即为整数
    
    cin >> x;  //输入一个整数，为x赋值————类似于scanf("%d",&x);
    while ( x != finish )  //当输入finish时，结束创建新结点的操作
    {  
        newNode = new NODE;      // 为新结点分配一个内存空间
        newNode->data = x;  //在新结点中存入数据x
        
        newNode->next = first->next; // first->next==NULL，即让新结点的指针指向NULL。
        first->next = newNode;       // 把创造的新结点，与头结点链接起来————至此，链表中多了一个结点
        
        cin >> x;  //输入一个整数，为x赋值
    }  
    return first;  //返回链表的头结点
}  

//输出链表
void output( LinkList head )  
{   cout << "List:";  //printf("List:")
  
    //循环————将链表中元素全部输出
    while ( head->next != NULL )  
    {   cout << head->next->data << ",";  
        head = head->next;  
    }  
    cout << endl;  
}  

  
int main(int argc, char** argv)   
{  
    LinkList head;  //定义一个头结点
  
    head = createList( -1 );  //创造一个新链表
    output( head );  //输出链表
    inverse( head );  //具体功能，有待完善……
    output( head );  
    return 0;  
}  